package com.atguigu.desaes;


import com.sun.org.apache.xml.internal.security.utils.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class DesAesDemo {


    public static void main(String[] args) throws Exception{

        // 原文
        String input = "晴天娃娃";
        // des加密必须是8位
        String key = "87654321";
        // 算法
        String algorithm = "DES";

        String transformation = "DES";

        String encryptDES=encryptDES(input,key,transformation,algorithm);
        System.out.println("加密："+encryptDES);

        //把encryptDES作为解密的原文
        String decryptDES=decryptDES(encryptDES,key,transformation,algorithm);
        System.out.println("解密:"+decryptDES);

//        // Cipher：密码，获取加密对象
//        // transformation:参数表示使用什么类型加密
//        Cipher cipher = Cipher.getInstance(transformation);
//        // 指定秘钥规则
//
//        // 第一个参数表示：密钥，key的字节数组
//        // 第二个参数表示：算法
//        SecretKeySpec sec= new SecretKeySpec(key.getBytes(), algorithm);
//        // 对加密进行初始化ENCRYPT_MODE
//        // 第一个参数：表示模式，有加密模式和解密模式
//        // 第二个参数：表示秘钥规则
//        cipher.init(Cipher.ENCRYPT_MODE,sec);
//        //cipher.init(Cipher.DECRYPT_MODE,sec);解密
//        // 进行加密
//        byte[] bytes = cipher.doFinal(input.getBytes());
//        // 打印密文
//        System.out.println(new String(bytes));


    }

    /**
     * 使用DES加密数据
     *
     * @param input          : 原文
     * @param key            : 密钥(DES,密钥的长度必须是8个字节)
     * @param transformation : 获取Cipher对象的算法
     * @param algorithm      : 获取密钥的算法
     * @return : 密文
     * @throws Exception
     */
    private static  String encryptDES
            (String input,String key,String transformation,String algorithm) throws  Exception{

        //获取一个对象
        Cipher cipher = Cipher.getInstance(transformation);
        //创建规则（密钥和算法）
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);
        //初始化机密模式
        cipher.init(Cipher.ENCRYPT_MODE,secretKeySpec);
        //加密
        byte[] bytes = cipher.doFinal(input.getBytes());

        //加密之后
        String encode = Base64.encode(bytes);

        return encode;
    }


    private static  String decryptDES
            (String input,String key,String transformation,String algorithm) throws  Exception{

        //获取一个对象
        Cipher cipher = Cipher.getInstance(transformation);
        //创建规则（密钥和算法）
        SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
        //初始化机密模式
        cipher.init(Cipher.DECRYPT_MODE,sks);
        //  解密，上面使用的base64编码，下面直接用密文
        byte[] bytes = cipher.doFinal(Base64.decode(input));
        //  因为是明文，所以直接返回
        return new String(bytes);

//        byte[] bytes = cipher.doFinal(encryptDES.getBytes());
//
//        //加密之后
//        String encode = Base64.encode(bytes);


    }




}
